package model

import (
	"time"
)

// OperationLog 操作日志模型
type OperationLog struct {
	ID        uint      `gorm:"primaryKey" json:"id"`
	UserID    uint      `gorm:"not null;index" json:"userId"`     // 用户ID
	Username  string    `gorm:"size:50;not null" json:"username"` // 用户名
	IP        string    `gorm:"size:45" json:"ip"`                // IP地址
	UserAgent string    `gorm:"size:500" json:"userAgent"`        // 用户代理
	Method    string    `gorm:"size:10;not null" json:"method"`   // HTTP方法 (GET/POST/PUT/DELETE)
	Path      string    `gorm:"size:255;not null" json:"path"`    // 请求路径
	Action    string    `gorm:"size:100;not null" json:"action"`  // 操作类型 (LOGIN/CREATE/UPDATE/DELETE等)
	Resource  string    `gorm:"size:50;not null" json:"resource"` // 资源类型 (user/course/booking等)
	Status    int       `gorm:"not null" json:"status"`           // 响应状态码
	Details   string    `gorm:"type:text" json:"details"`         // 操作详情
	CreatedAt time.Time `json:"createdAt"`                        // 创建时间
}

// OperationLogListReq 操作日志列表请求参数
type OperationLogListReq struct {
	Page      int    `form:"page"`
	PageSize  int    `form:"pageSize"`
	Username  string `form:"username"`  // 按用户名筛选
	Action    string `form:"action"`    // 按操作类型筛选
	Resource  string `form:"resource"`  // 按资源类型筛选
	IP        string `form:"ip"`        // 按IP地址筛选
	StartDate string `form:"startDate"` // 开始日期
	EndDate   string `form:"endDate"`   // 结束日期
}

// OperationLogListItem 操作日志列表项
type OperationLogListItem struct {
	ID        uint      `json:"id"`
	UserID    uint      `json:"userId"`
	Username  string    `json:"username"`
	IP        string    `json:"ip"`
	Method    string    `json:"method"`
	Path      string    `json:"path"`
	Action    string    `json:"action"`
	Resource  string    `json:"resource"`
	Status    int       `json:"status"`
	CreatedAt time.Time `json:"createdAt"`
}

// OperationLogDetailResp 操作日志详情响应
type OperationLogDetailResp struct {
	ID        uint      `json:"id"`
	UserID    uint      `json:"userId"`
	Username  string    `json:"username"`
	IP        string    `json:"ip"`
	UserAgent string    `json:"userAgent"`
	Method    string    `json:"method"`
	Path      string    `json:"path"`
	Action    string    `json:"action"`
	Resource  string    `json:"resource"`
	Status    int       `json:"status"`
	Details   string    `json:"details"`
	CreatedAt time.Time `json:"createdAt"`
}
